package com.sbl.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import javax.sql.DataSource;

/**
 *  和连接数据库相关的配置类
 * @PropertySource注解的作用：用于指定properties文件的位置
 * 属性：value：用于指定文件的名称和路径，关键字classpath，表示类路径下
 */
@PropertySource("classpath:jdbcConfig.properties")
public class JdbcConfig {

    @Value("${jdbc.driver}")
    private String driver ;

    @Value("${jdbc.url}")
    private String url ;

    @Value("${jdbc.username}")
    private String username ;

    @Value("${jdbc.password}")
    private String password ;

    /**
     *  创建JdbcTemplate
     *
     *  Bean注解的作用：把当前方法的返回值作为bean对象存入到Spring容器中
     *  属性：name用于指定bean的id，如果不写，默认值就是当前方法的名称
     *  查找的方式和AutoWired注解的作用是一样的，如果容器中有唯一的一个bean对象类直接注入，如果有多个，通过id和名字
     */
    @Bean(name = "jdbcTemplate")
    public JdbcTemplate createJdbcTemplate(DataSource dataSource){
        return new JdbcTemplate(dataSource);
    }
    /**
     * 用于测试，注入自动注入，如果有两个怎么办
     * 测试发现，如果有两个，那么和AutoWired是一样的，变量的名字和name一样即可注入成功
     *
     * expected at least 1 bean which qualifies as autowire candidate.（测试DataSource）
     */
    @Bean(name="jdbcTemplate2")
    public JdbcTemplate createJdbcTemplate2(DataSource dataSource){
        return new JdbcTemplate(dataSource);
    }


    /**
     * 创建数据源对象
     * @return
     */
    @Bean(name="dataSource")
    public DataSource createDataSource(){
        DriverManagerDataSource ds = new DriverManagerDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(username);
        ds.setPassword(password);
        return ds;
    }

    /**
     * 创建数据源对象
     * @return
     */
    @Bean(name="dataSource2")
    public DataSource createDataSource2(){
        DriverManagerDataSource ds = new DriverManagerDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(username);
        ds.setPassword(password);
        return ds;
    }

}
